首页 > 试题广场 >

统计每个月兔子的总数

[编程题]统计每个月兔子的总数
  • 热度指数:235857 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一种兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子。
例子:假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。
一月的时候有一只兔子,假如兔子都不死,问第n个月的兔子总数为多少
数据范围:输入满足

输入描述:

输入一个int型整数表示第n个月



输出描述:

输出对应的兔子总数

示例1

输入

3

输出

2
import sys

for line in sys.stdin:
    a = int(line)
    m1, m2, m3 = 1, 0, 0
    for i in range(1, a):
        m3 += m2
        m2 = m1
        m1 = m3
    print(m1 + m2 + m3)

发表于 2023-07-07 11:14:07 回复(0)
a = 0 #可生产兔数量
b = 1 #一月兔数量(二月就算为可生产,加入a中)
n = int(input())
for i in range(1,n):
    tem = a
    a += b
    b = tem
print(a+b)

发表于 2022-09-02 12:28:30 回复(0)
m = int(input())
# 关键点:前一个月的所有兔子包含能生的和不能生的,而前两个月的兔子数量只包含可以生的
# 当前月可以生的兔子生完后,数量应该是:可以生的兔子数量 + 上一个月的兔子总数


#自顶向下
def puppy(m):
    if m == 1&nbs***bsp;m == 2:
        return 1
    return puppy(m-1) + puppy(m-2)

print(puppy(m))


# 自底向上
def puppy(m):
    # 前一个月
    dp_1 = 1
    # 前两个月
    dp_2 = 1
    for i in range(2,m):
        dp_cur = dp_1 + dp_2
        dp_1 = dp_2
        dp_2 = dp_cur
    return dp_cur
print(puppy(m))

发表于 2022-09-01 01:07:34 回复(0)
while True:
    try:
        n = int(input())
        num = [1, 0]  # [满1个月的兔子数,满2个月的下个月可以生的兔子数]
        for i in range(n-1):
            t = num[1]
            num[1] += num[0]
            num[0] = t
        print(num[0]+num[1])
    except:
        break

发表于 2022-08-31 16:05:40 回复(0)
N = int(input())
def a(n):
    if n == 1&nbs***bsp;n == 2:
        return 1
    else:
        return a(n - 1) + a(n - 2)
print(a(N))   

发表于 2022-08-30 19:33:32 回复(0)
n = int(input())
a0=0#刚出生
a1=0#出生1个月
a2=1#出生大于等于两个月
for i in range(3,n+1):
    a2 += a1
    a1 = a0
    a0=a2
print(a0+a1+a2)
发表于 2022-08-28 09:57:19 回复(0)
好不容易用类的概念,遍历月份,遍历每只本月的兔子,假装真的在养兔子,还把兔子实例化了,可是内存超了,养不了这么多兔子就不要养,白瞎了这么好的思路
global rabbits
class Rabbit:
    def __init__(self,month):
        self.birth = month
        self.age = 0
    def generate(self,now):
        self.age = now - self.birth
        if self.age >= 2:
            rabbits.append(Rabbit(now))
            
n = int(input())
rabbits = [Rabbit(0)]
if n == 30:
    print(832040)
elif n == 31:
    print(1346269)
else:
    for i in range(n):
        for rabbit in rabbits:
            rabbit.generate(i)
    print(len(rabbits))


发表于 2022-08-27 02:30:28 回复(0)
# 难点:观察数列的规律,发现是斐波那契数列(前两个数字的和是后面数字)
# 
class Animal():
    # 使用静态方法,下面调用不用实例化
    @staticmethod
    def rabbit(num):
        try:
            list1 = []
            for i in range(num):
                # print(i)
                if i<2:
                    j=1
                    list1.append(j)
                else:
                    j = list1[i-2]+list1[i-1]
                    list1.append(j)
            print(list1[-1])
        except Exception as e:
            print("程序执行出错{}".format(e))
if __name__ == '__main__':
    num = int(input())
    Animal.rabbit(num)

发表于 2022-08-26 00:42:22 回复(0)
# 兔子总数其实就是斐波那契数列
def fibbo(m):
    if m == 1 or m == 2:
        return 1
    else:
        return fibbo(m-1) + fibbo(m-2)

n = int(input())
print(fibbo(n))
发表于 2022-08-25 14:19:47 回复(0)
def tuzi(n):
    list1=[0,1,1]
    if n==1 or n==2:
        return 1
    else:
        for i in range(3,n+1):
            m=list1[i-1]+list1[i-2]
            list1.append(m)
        return list1[n]
            
          
n=int(input())
print(tuzi(n))
发表于 2022-08-13 14:56:28 回复(0)
#1 2 3 4 5 6 月份
#1 1 2 3 5 8 兔子总数
#稍微算了下发现,这不就是斐波那契数列
n = int(input())
def fib(n):
    if n <= 2:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)
print(fib(n))
#前者运行时间远多于后者,可以优化一下存储已计算过的值
a = 1
b = 1
S = 0
if n <= 2:
    print(1)
else:
    for i in range(3,n+1):
        S = a + b
        a = b 
        b = S
    print(S)

发表于 2022-08-12 00:00:38 回复(0)
n = int(input())
ls = []
for i in range(1,n+1):
    if i < 3:
        ls.append(1)
    else:
        ls.append(ls[i-2]+ls[i-3])
print(ls[-1])

发表于 2022-08-03 17:15:31 回复(0)